package portalEstadoEntrega;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.naming.NamingException;

import org.apache.log4j.Logger;

import com.uade.business.BusinessDelegate;
import com.uade.business.BusinessDelegateImpl;
import com.uade.model.Configuracion;
import com.uade.model.Evento;
import com.uade.model.Respuesta;
import com.uade.model.exceptions.BusinessException;
import com.uade.model.exceptions.LogisticaMonitoreoException;
import com.uade.model.exceptions.NotFoundException;
import com.uade.webservices.logisticaMonitoreo.LogCreator;

@WebService (name="ServidorEstadoEntregaBean",
serviceName="ServidorEstadoEntregaBeanService",
targetNamespace="http://5.7.58.168:8080/portalEstadoEntrega/ServidorEstadoEntregaBeanService/",
portName="ServidorEstadoEntregaBeanPort")  
public class ServidorEstadoEntregaBean  {

	private Logger log = Logger
			.getLogger(ServidorEstadoEntregaBean.class);

	@WebMethod
	public String notificarEntregaDespacho(int xml) {
		Respuesta resp = new Respuesta();
		try {
			log.info("Ingresa a notificarEntregaDespacho");
			// Entrega entrega = parseXml(xml);

			log.info("Se parseo correctamente el XML");
			BusinessDelegate busDel = BusinessDelegateImpl.getInstance();
			busDel.recepcionEstado("ENTREGADA", Integer.valueOf(xml));
			log.info("Se actualizo la compra correctamente");

			// Notifica a Log y monitoreo
			Evento evento = new Evento();
			evento.setAccion(" Actualizar Compra Id: " + xml
					+ " Estado: ENTREGADA Portal G4");
			log.info("Se envia la notificacion a logistica y monitoreo ");
			enviarLog(evento.getXml());
			// Se arma el string de respuesta
			resp.setEstado("OK");
			resp.setMensaje("La compra fue actualizada, y notificada a logistica y monitoreo - Portal G4");

		} catch (NamingException e) {
			resp.setEstado("ERROR");
			resp.setMensaje("No pudo realizarse la operacion - Portal G4 ");
		} catch (NotFoundException e) {
			resp.setEstado("ERROR");
			resp.setMensaje("No pudo realizarse la operacion " + e.getMessage()
					+ " Portal G4 ");
		} catch (BusinessException e) {
			resp.setEstado("OK");
			resp.setMensaje("Se realizo la operacion de actualizacion, no pudo enviarse el log a logistica y monitoreo - Portal G4 ");
		} catch (LogisticaMonitoreoException e) {
			resp.setEstado("OK");
			resp.setMensaje("Se realizo la operacion de actualizacion, no pudo enviarse el log a logistica y monitoreo - Portal G4 ");
		} finally {
			log.info("Respuesta:  " + resp.toString());

		}
		return resp.toXmlString();
	}

	/**
	 * Obtiene la lista de configuraciones envia los logs a auditoria y
	 * monitoreo
	 * 
	 * @param compra
	 * @throws BusinessException
	 * @throws LogisticaMonitoreoException
	 * @throws NamingException
	 */
	private void enviarLog(String xml) throws BusinessException,
			LogisticaMonitoreoException, NamingException {

		// Obtiene la configuracion
		Configuracion conFiguracion = BusinessDelegateImpl.getInstance()
				.obtenerConfiguracionLogisticaMonitoreoLog();

		if (conFiguracion != null) {

			LogCreator logCreator = new LogCreator();
			logCreator.generarLog(xml, conFiguracion);
		} else {
			log.warn("No existe configuracion para realizar el log de la venta");
		}

	}

}
